package com.nine.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试 aop 的执行顺序
 * <p>
 * 一、仅有 4个注解，不包含 Around
 * 1、正常情况下： before -> method() -> afterReturning -> after
 * 2. 异常情况下： before -> method() -> afterThrowing -> after
 * <p>
 * 二、有 Around 注解
 * 1、正常情况下： around【before】 -> before -> method() -> afterReturning -> after -> around【returning】 -> around【after】
 * <p>
 * 2. 异常情况下：
 * <p>
 * 2.1、情形一：
 * // 在around中不去抛出异常，而是直接捕获异常的情形下，around【throwing】会执行
 * around【before】 -> before -> method() -> afterThrowing -> after -> around【throwing】 -> around【after】
 * <p>
 * 2.2、情形二：
 * // 在around直接抛出异常的情形下，around【throwing】不会执行
 * around【before】 -> before -> method() -> afterThrowing -> after
 */
@Slf4j
@RestController
@RequestMapping("/aop")
public class AopController {


    @GetMapping("/test")
    public String test() {
        String result = null;
        log.info("test...............................");
        int i = 1 / 0;
        result = "test";
        return result;
    }

}
